cmake_minimum_required(VERSION 2.8.9)

project(netxtransport)

set(LIB_MAJOR 1)
set(LIB_MINOR 3)
set(LIB_BUILD 0)
set(LIB_REVISION 0)
set(LIB_VERSION ${LIB_MAJOR}.${LIB_MINOR}.${LIB_REVISION})
set(LIBVERSION "${LIB_VERSION}.${LIB_BUILD}")

set(SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}/")

set(tk_dir "${SRCDIR}/Toolkit")
set(src_tk_dir "${tk_dir}/Source")
set(src_os_dir "${SRCDIR}/OSAbstraction")
set(src_user_dir "${SRCDIR}/User")

set(inc_dir ${src_tk_dir} ${src_tk_dir}/cifXAPI ${src_tk_dir}/HilscherDefinitions ${src_tk_dir}/APIHeader ${src_os_dir} ${src_user_dir})

set(dest_dir "${CMAKE_INSTALL_PREFIX}/lib/")
set(dest_inc_dir "${CMAKE_INSTALL_PREFIX}/include/netxtransport")

# file(GLOB...) allows for wildcard additions:
file(GLOB SOURCES "${SRCDIR}/*.c" "${src_tk_dir}/*.c" "${src_os_dir}/*.c" "${src_user_dir}/*.c")
include_directories(${inc_dir} /usr/include/)

set(linked_libs "-lpthread -ldl")

add_definitions(-DVERSION_INFO=${LIBVERSION} -DHOST_TRANSPORT_MARSHALLER_DEFS)

option(DEBUG "Build Library debug messages" OFF)
option(NXT_PACKET_PREALLOCATE "Packet pre-allocation" OFF)
option(NXT_MULTITHREADED "Allow multithreading" OFF)

if(DEBUG)
	set(CMAKE_BUILD_TYPE Debug)
	add_definitions(-DDEBUG -DNXT_HILTRANSPORT_DEBUG)
endif(DEBUG)
if(NXT_PACKET_PREALLOCATE)
	add_definitions(-DNXT_PACKET_PREALLOCATE)
endif(NXT_PACKET_PREALLOCATE)
if(NXT_MULTITHREADED)
	add_definitions(-DNXT_MULTITHREADED)
endif(NXT_MULTITHREADED)
if(CONNECTOR_PATH)
	add_definitions(-DCONNECTOR_BASE_PATH="${CONNECTOR_PATH}")
endif(CONNECTOR_PATH)

set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${prefix})
set(libdir ${exec_prefix}/lib)
set(includedir ${prefix}/include)
# configure pkgconfig file
configure_file( ${SRCDIR}/netxtransport.pc.in ${CMAKE_CURRENT_BINARY_DIR}/netxtransport.pc @ONLY)

# link and create shared & static library
add_library(${PROJECT_NAME} SHARED ${SOURCES} )
add_library(${PROJECT_NAME}_static STATIC ${SOURCES})

target_link_libraries(${PROJECT_NAME} ${linked_libs})
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${LIB_VERSION} SOVERSION ${LIB_MAJOR})
set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME netxtransport)

# install resources
install(TARGETS ${PROJECT_NAME} DESTINATION ${dest_dir})

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/netxtransport.pc DESTINATION ${dest_dir}/pkgconfig)

# install header files
file(GLOB INSTALL_HEADERS ${SRCDIR}/netxtransport_linux.h ${SRCDIR}/OSAbstraction/OS_Includes.h ${src_tk_dir}/cifXAPI/cifXUser.h ${src_tk_dir}/APIHeader/rcX_Public.h ${src_tk_dir}/OS_Dependent.h ${src_tk_dir}/ConnectorAPI.h ${src_tk_dir}/TL_Marshaller.h ${src_tk_dir}/netXTransport.h ${src_tk_dir}/TL_rcXPacket.h ${src_tk_dir}/TranslationLayer.h ${src_tk_dir}/HilTransportLayer.h ${src_tk_dir}/APIHeader/HilTransport.h ${src_tk_dir}/netXTransport_Errors.h ${src_tk_dir}/cifXAPI/cifXErrors.h ${src_tk_dir}/APIHeader/TLR_Types.h ${src_tk_dir}/APIHeader/rcX_User.h ${src_tk_dir}/cifXAPI.h ${src_tk_dir}/APIHeader/netXConnectorErrors.h ${src_tk_dir}/cifXAPI/netXAPI.h ${src_tk_dir}/HilscherDefinitions/Hil_SystemCmd.h ${src_tk_dir}/HilscherDefinitions/Hil_Types.h ${src_tk_dir}/HilscherDefinitions/Hil_Compiler.h ${src_tk_dir}/HilscherDefinitions/Hil_Packet.h ${src_tk_dir}/HilscherDefinitions/Hil_DualPortMemory.h ${src_tk_dir}/HilscherDefinitions/Hil_SharedDefines.h ${src_tk_dir}/HilscherDefinitions/Hil_FirmwareIdent.h)
install(FILES ${INSTALL_HEADERS} DESTINATION ${dest_inc_dir})

